package itheima_edu_info_manager.com.itheima.edu.info.manager.controller;

import itheima_edu_info_manager.com.itheima.edu.info.manager.domain.Teacher;
import itheima_edu_info_manager.com.itheima.edu.info.manager.service.TeacherService;

import java.util.Scanner;
import java.util.concurrent.TimeoutException;

/*
    TeacherController --> TeacherService  -->TeacherDao
    本类中调用的是TeacherService 内的方法
 */
public class TeacherController {
    //提升为成员变量，本类中的所有方法都可以使用。使用private 进行修饰，防止其他类进行调用
    private Scanner sc = new Scanner(System.in);
    private TeacherService teacherService =new TeacherService();
    //老师系统环境的搭建
    public void start() {
        //该方法是开启老师管理系统，并进行展示！
            //对循环进行命名： studentloop:
            while (true){
                //老师管理系统菜单的搭建
                System.out.println("--------欢迎来到 <老师> 管理系统--------");
                System.out.println("请输入您的选择: 1.添加老师  2.删除老师  3.修改老师  4.查看老师  5.退出");
                String choice = sc.next();
                switch (choice) {
                    case "1":
                        //System.out.println("添加老师");
                        addTeacher();
                        break;
                    case "2":
                        //System.out.println("删除老师");
                        deleteTeacherById();
                        break;
                    case "3":
                        //System.out.println("修改老师");
                        upDateTeacherById();
                        break;
                    case "4":
                        //System.out.println("查看老师");
                        findAllTeacher();
                        break;
                    case "5":
                        System.out.println("感谢使用老师管理！");
                        return;
                    //通过对循环进行命名，然后使用break studentloop;结束此次的循环，但是并不影响InfoManagerEntry中的循环
                    default:
                        break;
                }
        }
    }
    //添加老师
    public void addTeacher() {
        //本来是设定在循环内，因为后面需要使用这个成员，所以将其使用域扩大
        String id;
        //因无法确定需要输入多少次才可以输入正确的id，所以需要设定一个无限循环。
        while (true){
            System.out.println("请输入老师id:");
            id = sc.next();
            //在teacherService中有一个isExists()方法，将接收到的id，放入这个方法中进行调用，会收到一个boolean类型的值，
            // 从而进行判断
            boolean exists = teacherService.isExists(id);
            if (exists){
                System.out.println("你输入的id，已经被占用。请重新输入！");
            }else {
                //****需要将无限循环结束****
                break;
            }
        }
        //调用getTeacher()方法进行数据的封装操作
        Teacher teacher = getTeacher(id);
        //调用方法进行添加操作
        boolean result = teacherService.addTeacher(teacher);
        //根据return的结果，判断操作是否完成
        if (result){
            System.out.println("添加成功！");
        }else {
            System.out.println("添加失败，请重新尝试！");
        }
    }

    //删除老师
    public void deleteTeacherById() {
        //调用putTeacherId（）方法，判断id是否存在，并用id进行保存
        String id = putTeacherId();
        //调用deleteTeacherById(id)方法进行删除的操作
        teacherService.deleteTeacherById(id);
        //提示删除成功信息
        System.out.println("删除成功！");
    }

    //修改老师
    public void upDateTeacherById() {
        //调用putTeacherId（）方法，判断id是否存在，并用id进行保存
        String id = putTeacherId();
        //调用getTeacher(id)方法，将接收到的数据进行封装操作
        Teacher teacher = getTeacher(id);
        //根据调用upDateTeacherById(id,teacher)方法进行修改操作
        teacherService.upDateTeacherById(id,teacher);
    }

    //查看老师
    public void findAllTeacher() {
        //调用findAllTeacher()方法，因return回来的是一个数组，需要创建一个数组进行保存
        Teacher[] teacher = teacherService.findAllTeacher();
        //判断返回的数组信息是否为null；
        if (teacher == null) {
            System.out.println("查无信息，请添加后再重新查询！");
            //***需要将循环结束，否则程序会停止***
            return;
        }
        System.out.println("学号\t\t姓名\t年龄\t生日");
        //遍历接收到的数组
        for (int i = 0; i < teacher.length; i++) {
            Teacher te = teacher[i];
            //判断数组中是否为null
            if (te != null){
                System.out.println(te.getId() + "\t" + te.getName() + "\t" + te.getAge() + "\t\t" + te.getBirthday());
            }
        }
    }

    //将接收到的数据进行封装
    public Teacher getTeacher(String id) {
        System.out.println("请输入老师姓名:");
        String name = sc.next();
        System.out.println("请输入老师年龄:");
        String age = sc.next();
        System.out.println("请输入老师生日:");
        String birthday = sc.next();
        /*
        无参构造方法
        Teacher teacher = new Teacher();
        teacher.setId(id);
        teacher.setName(name);
        teacher.setAge(age);
        teacher.setBirthday(birthday);
         */
        //有参构造方法
        return new Teacher(id,name,age,birthday);
    }

    //判断id是否存在，因为deleteTeacherById() / upDateTeacherById() 重复使用本段代码 ，所以集合称为一个方法，需要使用则进行调用
    public String putTeacherId() {
        String id;
        while (true){
            System.out.println("请输入id:");
            id = sc.next();
            boolean exists = teacherService.isExists(id);
            if (!exists){
                System.out.println("输入的id不存在，请重新输入！");
            }else {
                break;
            }
        }
        return id;
    }



}
